約 2,411,789 件
https://w.atwiki.jp/aerocats/pages/59.html
終了メッセージ ----- rcDown ----- ===== Starting shutdown_start.sh ===== [Success] ===== Starting shutdown_proc.sh ===== ===== Starting clientUtil_servd.sh ===== Stop clientUtil_server [Success] ===== Starting smb.sh ===== $Shutting down SMB services $Shutting down NMB services [Success] ===== Starting networking.sh ===== Deconfiguration network interface lo eth0 killall dhcpcd no process killed [Success] ===== Starting Kevent.sh ===== [Success] ===== Starting FanController.sh ===== Stopping a fan ........... [Success] [Success] ===== Starting umount_disk.sh ===== [Success] The system is going down NOW !! Sending SIGTERM to all processes. The system is halted. md stopping all md devices. md md0 switched to read-only mode. Synchronizing SCSI cache for disk sda System halted.
https://w.atwiki.jp/aerocats/pages/57.html
起動メッセージ シリアルコンソール使用 LAN接続済み HDD装着 Orion1 CPU = Low === KURO U-Boot. === ** LOADER ** ** KUROBOX BOARD KURO_BOX LE (CFG_ENV_ADDR=fffff000) U-Boot 1.1.1 (Apr 10 2007 - 18 10 08) Marvell version 1.12.1 - TINY DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB [256kB@fffc0000] Flash 256 kB Addresses 20M - 0M are saved for the U-Boot usage. Mem malloc Initialization (20M - 16M) Done NAND 256 MB Soc 88F5182 A2 CPU ARM926 (Rev 0) running @ 500Mhz Orion 1 streaming disabled SysClock = 250Mhz , TClock = 166Mhz USB 0 host mode USB 1 host mode PCI 0 PCI Express Root Complex Interface PCI 1 Conventional PCI, speed = 33000000 Net egiga0 [PRIME] Using 88E1118 phy hit any key to switch tftp boot. Hit any key to stop autoboot 2 1 0 system_bootend Hit any key to stop autoboot 3 2 1 0 Reset IDE Marvell Serial ATA Adapter Integrated Sata device found Device 0 OK Model ST380815AS Firm 3.AAC Ser# 9QZ15T5J Type Hard Disk Supports 48-bit addressing Capacity 76319.0 MB = 74.5 GB (156301488 x 512) Using device ide0, partition 1 Loading from block device ide device 0, partition 1 Name hda1 Type U-Boot File /uImage.buffalo 1736436 bytes read stop_sound ## Booting image at 00100000 ... Image Name Linux-2.6.12.6-arm1 Created 2007-02-08 6 00 09 UTC Image Type ARM Linux Kernel Image (uncompressed) Data Size 1736372 Bytes = 1.7 MB Load Address 00008000 Entry Point 00008000 Verifying Checksum ... OK OK Starting kernel ... arg console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09 CONFIG_BUFFALO_PLATFORM CONFIG_BUFFALO_KUROBOX --- Uncompressing Linux................................................................................................................. done, booting the kernel. Linux version 2.6.12.6-arm1 (root@dev-hara) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #2 Thu Feb 8 15 00 20 JST 2007 CPU ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ) CPU0 D VIVT write-back cache CPU0 I cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets CPU0 D cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets Machine MV-88fxx81 Using UBoot passing parameters structure Sys Clk = 250000000, Tclk = 166664740 Memory policy ECC disabled, Data cache writeback Built 1 zonelists Kernel command line console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09 PID hash table entries 1024 (order 10, 16384 bytes) Console colour dummy device 80x30 Dentry cache hash table entries 32768 (order 5, 131072 bytes) Inode-cache hash table entries 16384 (order 4, 65536 bytes) Memory 128MB 0MB 0MB 0MB = 128MB total Memory 126208KB available (3037K code, 425K data, 112K init) Mount-cache hash table entries 512 CPU Testing write buffer coherency ok NET Registered protocol family 16 serial_initialize_ttyS1 (Debug) ttyS1 is initialized. config_device_cs Error Unknown board CPU Interface ------------- SDRAM_CS0 ....base 00000000, size 128MB SDRAM_CS1 ....disable SDRAM_CS2 ....disable SDRAM_CS3 ....disable PEX0_MEM ....base e0000000, size 128MB PEX0_IO ....base f2000000, size 1MB PCI0_MEM ....base e8000000, size 128MB PCI0_IO ....base f2100000, size 1MB INTER_REGS ....base f1000000, size 1MB DEVICE_CS0 ....base fa000000, size 2MB DEVICE_CS1 ....base f4000000, size 32MB DEVICE_CS2 ....base fa800000, size 1MB DEV_BOOCS ....base ff800000, size 8MB CRYPTO ENG ....no such Flash bankwidth 1, base ff800000, size 400000 BUFFALO KUROBOX FLASH size 4096[KB] Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- BUFFALO_BOARD_KUROBOX Soc 88F5182 A2 Detected Tclk 166664740 and SysClk 250000000 Marvell USB EHCI Host controller #0 c04e4b00 Marvell USB EHCI Host controller #1 c04e4a40 pexBarOverlapDetect winNum 2 overlap current 0 mvPexInit Warning Bar 2 size is illigal it will be disabled please check Pex and CPU windows configuration PCI bus0 Fast back to back transfers enabled PCI bus1 Fast back to back transfers enabled SCSI subsystem initialized usbcore registered new driver usbfs usbcore registered new driver hub Use the XOR engines (offloading) for enhancing the following functions o RAID 5 Xor calculation o kernel memcpy o kenrel memzero o copy user to/from kernel buffers Number of XOR engines to use 2 cesadev_init(c00122e0) Fast Floating Point Emulator V0.9 (c) Peter Teichmann. inotify device minor=63 JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc. SGI XFS with no debug enabled Serial 8250/16550 driver $Revision 1.90 $ 4 ports, IRQ sharing disabled ttyS0 at MMIO 0x0 (irq = 3) is a 16550A ttyS1 at MMIO 0x0 (irq = 4) is a 16550A io scheduler noop registered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered RAMDISK driver initialized 3 RAM disks of 32768K size 1024 blocksize loop loaded (max 8 devices) Marvell Gigabit Ethernet Driver egiga o Ethernet descriptors in DRAM o DRAM SW cache-coherency o Checksum offload enabled o Loading network interface ** egiga_init_module (10) eth0 Intergrated Sata device found scsi0 Marvell SCSI to SATA adapter scsi1 Marvell SCSI to SATA adapter Vendor Seagate Model ST380815AS Rev 3.AA Type Direct-Access ANSI SCSI revision 03 SCSI device sda 156301488 512-byte hdwr sectors (80026 MB) SCSI device sda drive cache write back SCSI device sda 156301488 512-byte hdwr sectors (80026 MB) SCSI device sda drive cache write back sda sda1 sda2 sda3 sda4 Attached scsi disk sda at scsi0, channel 0, id 0, lun 0 Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0 physmap flash device 400000 at ff800000 Found SST 39LF020 phys_mapped_flash Found 1 x8 devices at 0x0 in 8-bit bank number of JEDEC chips 1 cfi_cmdset_0002 Disabling erase-suspend-program due to code brokenness. RedBoot partition parsing not available NAND device Manufacturer ID 0x20, Chip ID 0xda (ST Micro NAND 256MiB 3,3V 8-bit) Scanning device for bad blocks Using static partition definition Creating 3 MTD partitions on "nand_mtd" 0x00000000-0x00400000 "uImage" 0x00400000-0x04400000 "rootfs" 0x04400000-0x10000000 "extra" usbmon debugs is not available ehci_platform ehci_platform.4523 EHCI Host Controller ehci_platform ehci_platform.4523 new USB bus registered, assigned bus number 1 ehci_platform ehci_platform.4523 irq 17, io mem 0x00000000 ehci_platform ehci_platform.4523 park 0 ehci_platform ehci_platform.4523 USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 1-0 1.0 USB hub found hub 1-0 1.0 1 port detected ehci_platform ehci_platform.16781 EHCI Host Controller ehci_platform ehci_platform.16781 new USB bus registered, assigned bus number 2 ehci_platform ehci_platform.16781 irq 12, io mem 0x00000000 ehci_platform ehci_platform.16781 park 0 ehci_platform ehci_platform.16781 USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 2-0 1.0 USB hub found hub 2-0 1.0 1 port detected USB Universal Host Controller Interface driver v2.2 Initializing USB Mass Storage driver... usbcore registered new driver usb-storage USB Mass Storage support registered. usbcore registered new driver usbhid drivers/usb/input/hid-core.c v2.01 USB HID core driver mice PS/2 mouse device common for all mice md raid0 personality registered as nr 2 md raid1 personality registered as nr 3 md raid5 personality registered as nr 4 raid5 measuring checksumming speed arm4regs 304.000 MB/sec 8regs 215.200 MB/sec 32regs 249.200 MB/sec raid5 using function arm4regs (304.000 MB/sec) md md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27 Buffalo Platform Linux Driver(Light) 0.01 installed. MICON ctrl (C) BUFFALO INC. V.1.00 installed. Kernel event proc (C) BUFFALO INC. V.1.00 installed. MICON V2 (C) BUFFALO INC. V.1.00 installed. NET Registered protocol family 2 IP routing cache hash table of 1024 buckets, 8Kbytes TCP established hash table entries 8192 (order 4, 65536 bytes) TCP bind hash table entries 8192 (order 3, 32768 bytes) TCP Hash tables configured (established 8192 bind 8192) NET Registered protocol family 1 NET Registered protocol family 17 md Autodetecting RAID arrays. md autorun ... md ... autorun DONE. XFS mounting filesystem sda2 VFS Mounted root (xfs filesystem). Freeing init memory 112K init started BusyBox v1.1.1 (2006.11.29-02 37+0000) multi-call binary Starting pid 223, console /dev/ttyS0 /etc/init.d/rcS --- rcStart (hddroot) --- ===== Starting checkroot.sh ===== grep /proc/mtd No such file or directory grep /proc/mtd No such file or directory grep /proc/mtd No such file or directory chown unknown group name rpcuser grep /proc/buffalo/firmware No such file or directory rm /var/lock/perfmon is a directory rm /var/lock/printing is a directory rm /var/lock/subsys is a directory [Success] ===== Starting MountSystemFolders ===== [Success] Setting up swapspace version 1, size = 139825152 bytes Adding 136544k swap on /dev/sda3. Priority -1 extents 1 ===== Starting Kevent.sh ===== [Success] ===== Starting mount_share.sh ===== Mounting /dev/sda4 on /home as a xfs file system. XFS mounting filesystem sda4 Starting XFS recovery on filesystem sda4 (dev sda4) Ending XFS recovery on filesystem sda4 (dev sda4) Success. Mounting /dev/mtd3 on /mnt/mtd as a jffs2 file system. mount mount point /mnt/mtd does not exist Failed. [Failed ] ===== Starting sethostname.sh ===== hostname is setted to KUROBOX-PRO [Success] ===== Starting networking.sh ===== create network files.. IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[] killall dhcpcd no process killed route SIOC[ADD|DEL]RT No such process Configuration network interface lo eth0 requesting DHCP tout=30[s] eth0 link down eth0 link up 5 , full duplex 5 , speed 100 Mbps 5 hostname is setted to KUROBOX-PRO [Success] ===== Starting smb.sh ===== $Starting SMB services $Starting NMB services [Success] ===== Starting FanController.sh ===== [Success] ===== Starting bootcomplete.sh ===== [Success] Starting pid 613, console /dev/ttyS0 /sbin/getty KUROUTOSHIKOU KUROBOX Series KUROBOX-PRO login
https://w.atwiki.jp/aerocats/pages/16.html
mountコマンドは、デバイスをLinuxの任意の地点に配置するというもの。 HDDをパーティション単位で好きな箇所にマウントする、USBメモリやCD/DVDドライブをマウントする、など、デバイスをファイルシステムとして取り扱う。 標準Linuxでのmountコマンド 概要 helpを表示してみる。 ~ # mount --help BusyBox v1.1.1 (2007.04.06-12 02+0000) multi-call binary Usage mount [flags] DEVICE NODE [-o options,more-options] Mount a filesystem. Filesystem autodetection requires /proc be mounted. Flags -a Mount all filesystems in fstab -o option One of many filesystem options, listed below -r Mount the filesystem read-only -t fs-type Specify the filesystem type -w Mount for reading and writing (default) Options for use with the "-o" flag async/sync Writes are asynchronous / synchronous atime/noatime Enable / disable updates to inode access times dev/nodev Allow use of special device files / disallow them exec/noexec Allow use of executable files / disallow them loop Ignored (loop devices are autodetected) suid/nosuid Allow set-user-id-root programs / disallow them remount Re-mount a mounted filesystem, changing its flags ro/rw Mount for read-only / read-write bind Bind a directory to an additional location move Relocate an existing mount point. There are EVEN MORE flags that are specific to each filesystem You ll have to see the written documentation for those filesystems ~ # 標準LinuxでのmountコマンドはBusyBoxが動作する。 コマンドの実行 HDD装着(未フォーマット) mountコマンドの実行結果は以下。 ~ # mount /dev/root on / type jffs2 (rw,noatime) proc on /proc type proc (rw,nodiratime) sysfs on /sys type sysfs (rw) usbfs on /proc/bus/usb type usbfs (rw) devpts on /dev/pts type devpts (rw) /dev/ram1 on /mnt/ram type tmpfs (rw) /dev/mtd3 on /mnt/mtd type jffs2 (rw,noatime) この出力を表にまとめてみる。 デバイス名 マウント先 タイプ マウントオプション /dev/root / jffs2 rw,noatime proc /proc proc rw,nodiratime sysfs /sys sysfs rw usbfs /proc/bus/usb usbfs rw devpts /dev/pts devpts rw /dev/ram1 /mnt/ram tmpfs rw /dev/mtd3 /mnt/mtd jffs2 rw,noatime
https://w.atwiki.jp/atyou/pages/69.html
LANDISK(HDL-G)のHDD交換方法 今回は250Gから500Gに交換した。 <用意するもの> 外付けHDDケース(USB接続) 交換するHDD(IDEを選ぶこと。ここ重要!) プラスドライバー HDL-Uシリーズと異なり、本体ROMにRedbootが書き込まれているため、 MBRは空のままでも、構わない。 以下、手順 バックアップ先の外付けHDD(USB接続)をLANDISKに接続する (以下、/dev/sda と認識されたという前提とする) telnetで接続して、スーパーユーザになる。 #su - 元のパーティションの情報を取得する。 #sfdisk -d /dev/hda hda.sfdisk 新しいディスクを同じパーティション構成にする。 #sfdisk /dev/sda hda.sfdisk /dev/sda1、/dev/sda2にデータをコピー # dd bs=`expr 512 \* 63` if=/dev/hda1 of=/dev/sda1 # dd bs=`expr 512 \* 63` if=/dev/hda2 of=/dev/sda2 パーティションサイズを大きくするため /dev/sda4、5、6を作り直す。 # fdisk # d 削除 # 4 sda4 # w 一旦終了 # fdisk # n 新規作成(/dev/sda4) # 拡張パーティションを選ぶ # サイズはMAX # w # fdisk # n 新規作成(/dev/sda5) # hda.sfdiskに記載されている/dev/hda5のサイズと同じパーティションを作成 # w # fdisk # n 新規作成(/dev/sda6) # サイズはMAX # w /dev/sda5にデータをコピー # dd bs=`expr 512 \* 63` if=/dev/hda1 of=/dev/sda1 /dev/sda6をext3でフォーマット # mke2fs -j /dev/sda6 /dev/sda6をマウント #mount -t ext3 /dev/sda6 /mnt/XXXX (例えば /mnt/usbdisk1) /dev/sda6にデータをコピー #cp -pR /mnt/hda6/* /mnt/sda6 アンマウント #umount /dev/sda /mnt/XXXX ここまでで外付けHDDへのコピーが完了 電源を落として、カバーをあけてHDDを交換して再起動 交換完了!! 注意:このメモは翌日記憶している範囲で書いているので 間違ってたらゴメンナサイ 参考 Hack!Hack!Hack! Giga LANDISKをDebian化 (1/4) http //www.itmedia.co.jp/enterprise/articles/0508/31/news002.html 分解web http //bunkai.jp/ どうでもいいこと http //www5a.biglobe.ne.jp/~kura-hp/document/LANDISK/0/0.html 第01回 「LANDISKのバックアップ」 http //landisk.kororo.jp/diary/01_backup.php#1 IO DATA LANDISK HDL-Gシリーズを apt-get可能に http //www.kameda-lab.org/_local/imagelab.tsukuba.ac.jp/computer/IO-data-Landisk/ GigaLandisk - kawara s PukiWiki http //kawara.homelinux.net/pukiwiki/pukiwiki.php?GigaLandisk I-O Hack/Giga LANDISK - wiki@nothing http //wiki.nothing.sh/page/I-O%20Hack/Giga%20LANDISK HDL-G Hack - FreeStyleWiki http //www.flammable.jp/cgi-bin/wiki/wiki.cgi?page=HDL-G+Hack#p7
https://w.atwiki.jp/aerocats/pages/54.html
標準Linuxの/etc/init.dにある。 スクリプト #!/bin/sh PATH=/bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin export PATH DispSF(){ if [ $1 -eq 0 ] ; then echo [Success] else echo [Failed ] fi } MountSystemFolders(){ ##### mount system file systems.##### ##### we can t mount usbfs cause kernel don t have a usb driver statically. #### echo "===== Starting MountSystemFolders =====" echo -n "mounting procfs ... " mount -t proc proc /proc DispSF $? echo -n "mounting sysfs ... " mount -t sysfs sysfs /sys DispSF $? echo -n "mouting usbfs ... " if [ ! -e /proc/bus/usb ] ; then mkdir /proc/bus/usb -p fi mount -t usbfs usbfs /proc/bus/usb DispSF $? echo -n "remouting rootfs ... " mount -o rw,remount /dev/root / DispSF $? echo -n "mounting all devices ... " mount -a DispSF $? echo "" } BootendNotify(){ miconapl -b -a boot_end } RestoreClock(){ hwclock -l -s } echo "--- rcStart (NANDroot) ---" RestoreClock MountSystemFolders ldconfig /sbin/depmod -a . /usr/local/bin/kuro_lib for CMD in checkroot.sh Kevent.sh do exec_sh ${CMD} done for CMD in mount_share.sh sethostname.sh networking.sh httpd.sh telnet.sh inetd.sh do exec_sh ${CMD} done # file services for CMD in smb.sh do exec_sh ${CMD} done exec_sh clientUtil_servd.sh exec_sh bootcomplete.sh exec_sh FanController.sh exec_sh boss.sh /usr/local/bin/PlayBeep.sh /usr/local/music/SW_ON.msc
https://w.atwiki.jp/aerocats/pages/37.html
標準Linuxの/usr/local/bin/内にある。 スクリプト ~ # cat /usr/local/bin/KeventHandller.sh #!/bin/sh # $1 Kernel event name . /usr/local/bin/kuro_lib case $1 in lanact) if [ "$3" = "full" ] ; then FULL_HALF="f" else FULL_HALF="h" fi case $2 in 0) LINKSPEED="nolink" ;; 10) LINKSPEED="10${FULL_HALF}" ;; 100) LINKSPEED="100${FULL_HALF}" ;; 1000) LINKSPEED="1000" ;; *) ;; esac . /etc/netinfo [ ! -f /var/lock/networking ] [ "${my_ipaddress}" = "dhcp" ] \ [ $2 -ne 0 ] [ -f /var/tmp/bootcomplete ] \ /etc/init.d/networking.sh restart ;; micon_interrupts) INT_DETAIL=`$MICONAPL -a int_get_switch_status |grep "int=" |sed -e "s/int=//"` case ${INT_DETAIL} in power_sw) /usr/local/bin/shutdown.sh normal ;; init_sw_front) /usr/local/bin/InitDisk1.sh ;; *) ;; esac MiconIntEnable ;; *) echo "Unknown(or not supported) event driven." ;; esac ~ #
https://w.atwiki.jp/aerocats/pages/58.html
hexdumpコマンドは、あるファイルを指定するフォーマットで出力するフィルターユーティリティだ。 標準Linuxでのhexdumpコマンド 概要 helpを表示してみる。 ~ # hexdump --help BusyBox v1.1.1 (2007.04.06-12 02+0000) multi-call binary Usage hexdump [-[bcCdefnosvx]] [OPTION] FILE The hexdump utility is a filter which displays the specified files, or the standard input, if no files are specified, in a user specified format -b One-byte octal display -c One-byte character display -C Canonical hex+ASCII, 16 bytes per line -d Two-byte decimal display -e FORMAT STRING -f FORMAT FILE -n LENGTH Interpret only length bytes of input -o Two-byte octal display -s OFFSET Skip offset byte -v display all input data -x Two-byte hexadecimal display 標準LinuxでのhexdumpコマンドはBusyBoxが動作する。
https://w.atwiki.jp/julieta/pages/21.html
編集 ディスクの追加 # dd if=/dev/zero of=/dev/adn bs=1k count=1 ディスクadnに0を一回書き込む # fdisk -BI adn ディスクの初期化 # bsdlabel -Bw adns1 auto ディスクにラベルを付ける # bsdlabel -e adns1 ディスクラベルを編集しパーティションを追加する a を消してd を作成。fstypeを4.2BSDあとは*右は空欄 # bsdlabel -e adnで確認 # newfs /dev/ad7s1d ufsファイルシステムを作る # mkdir /newdir マウントポイントの作成 # vi /etc/fstab マウントの設定 FStypeはufs Optionsはrw右は空欄 # mount /dev/ad7s1d /newdir マウントする
https://w.atwiki.jp/aerocats/pages/49.html
標準Linuxの/etc/init.d/内にある。 スクリプト スクリプト詳細configure関数 set_defaultGw関数 set_defaultIp関数 set_defaultIf関数 set_dns関数 start関数 stop関数 スクリプト本体 スクリプト #!/bin/sh # # start/stop network deamons # # DHCPCD=/sbin/dhcpcd BASE=`basename $DHCPCD` LOCK=/var/lock/networking . /usr/local/bin/kuro_lib if [ -f /etc/netinfo ]; then . /etc/netinfo fi # for dhcpcd.exe export INTERFACE=$ENETNAME configure() { echo "create network files.." echo "IP=[$my_ipaddress], netmask=[$my_subnetmask], dgw=[$my_dgw], dns1=[$my_dns1], dns2=[$my_dns2]" if [ "$my_ipaddress" = "" ]; then my_ipaddress=$DEFAULT_IP my_subnetmask=255.255.255.0 my_dgw= fi touch /etc/resolv.conf } set_defaultGw() { if [ "$my_dgw" = "" ]; then route del default else route add default gw $my_dgw fi } set_defaultIp() { echo "** setting default ip" /sbin/ifconfig $ENETNAME $DEFAULT_IP netmask 255.255.255.0 # delete default gw my_dgw= } set_defaultIf() { TMP=`cat /proc/net/route |awk {print $4} |grep 0003` if [ "$TMP" = "" ]; then echo "add default if" #route add -net 255.255.255.255 netmask 255.255.255.255 $ENETNAME route add -net default $ENETNAME fi } set_dns() { echo "Configuration resolv.conf" cat /dev/null /etc/resolv.conf if [ "$my_dns1" != "" ]; then echo "nameserver $my_dns1" /etc/resolv.conf fi if [ "$my_dns2" != "" ]; then echo "nameserver $my_dns2" /etc/resolv.conf fi } start() { configure /sbin/ifconfig lo up killall $BASE rm -f /etc/dhcpc/dhcpcd-eth0.pid # delete default gw while do /sbin/route del default if [ $? -ne 0 ]; then break fi done sleep 1 echo "Configuration network interface lo $ENETNAME" ## ## change mtu (frame-size 1518,4100,7418) ## if [ "$mtu" = "4102" ] ; then mtu=4084 elif [ "$mtu" = "7422" ] ; then mtu=7404 elif [ "$mtu" = "9694" ] ; then mtu=9676 else mtu=1500 fi /sbin/ifconfig $ENETNAME mtu $mtu multicast if [ $? -ne 0 ]; then echo "mtu fail" /sbin/ifconfig $ENETNAME mtu 1500 multicast fi if [ "$my_ipaddress" = "dhcp" ]; then if [ "$my_dgw" != "" ]; then echo "--- set static dgw" DHCP_GW="-G $my_dgw" fi ## see also /etc/dhcpc/dhcpcd.exe echo "DHCPCSTATE=requesting" /var/tmp/dhcpcstate ## echo "requesting DHCP tout=30[s]" $DHCPCD -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 $ENETNAME if [ $? -ne 0 ]; then echo "** dhcp fail" echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate set_defaultIp set_defaultGw # wait linkup delay sleep 4 fi else echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate echo "/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask" /sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask if [ $? -ne 0 ]; then set_defaultIp fi set_defaultGw set_dns fi ## set_defaultIf ## set ipaddress in /etc/hosts /etc/init.d/sethostname.sh #/usr/local/bin/change_notify.sh network } stop() { echo "Deconfiguration network interface lo $ENETNAME" killall $BASE /sbin/ifconfig $ENETNAME down /sbin/ifconfig lo down } # for NFS TMP=`grep /dev/root /proc/mounts|grep nfs` if [ "$TMP" != "" ]; then echo "nfs root mode. skip $ENETNAME network configuration." exit 0 fi # lock_file check lock_file create case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac lock_file delete exit 0 スクリプト詳細 ブロックごとに見てみる。 #!/bin/sh # # start/stop network deamons # # シェルにshを指定。ネットワークデーモンの開始/停止のコメント。 DHCPCD=/sbin/dhcpcd BASE=`basename $DHCPCD` LOCK=/var/lock/networking DHCPCDという変数を用意し、そこに/sbin/dhcpcdを代入。 BASEという変数を用意し、そこに basename /sbin/dhcpcd を代入。 LOCKという変数を用意し、そこに/var/lock/networkingを代入。 . /usr/local/bin/kuro_lib /usr/local/bin/kuro_libをサブシェルで走らせる。 kuro_lib内の DEFAULT_IP変数(=192.168.11.150) ENETNAME変数(=eth0) lock_file関数 を使用するためだ。 if [ -f /etc/netinfo ]; then /etc/netinfoが存在すれば(/etcにnetinfoというファイルがあれば)以下を実行。 . /etc/netinfo /etc/netinfoをサブシェルで走らせる。 netinfo内の my_ipaddress変数 my_subnetmask変数 my_dgw変数 my_dns1変数 my_dns2変数 mtu変数 を使用するためだ。 fi /etc/netinfoの存在の有無の条件分岐を終了。 # for dhcpcd.exe /etc/dhcpc/dhcpcd.exeのために、というコメント。 export INTERFACE=$ENETNAME 環境変数を設定するexportコマンドで、INTERFACE変数にeth0を代入している。 ここからは7つの関数の記述になる。 configure関数 configure() { configure関数の定義が始まる。 echo "create network files.." echo "IP=[$my_ipaddress], netmask=[$my_subnetmask], dgw=[$my_dgw], dns1=[$my_dns1], dns2=[$my_dns2]" 画面に create network files.. IP=[IPアドレス値], netmask=[ネットマスク値], dgw=[デフォルトゲートウェイ値], dns1=[DNS1値], dns2=[DNS2値] と表示される。 if [ "$my_ipaddress" = "" ]; then my_ipaddress変数に何も設定されていなければ以下を実行。 my_ipaddress=$DEFAULT_IP my_subnetmask=255.255.255.0 my_dgw= my_ipaddress変数にDEFAULT_IP変数の値、my_subnetmask変数に255.255.255.0、my_dgw変数は空、とそれぞれの変数に値を代入。 fi my_ipaddress変数が空かどうかの条件分岐を終了。 touch /etc/resolv.conf /etcにresolv.confというファイルを作成。 } configure関数はここまで。 set_defaultGw関数 set_defaultGw() { set_defaultGw関数の定義ここから。 if [ "$my_dgw" = "" ]; then my_dgw変数が空であれば以下を実行。 route del default routeコマンド?でデフォルト経路情報を削除。 デフォルト経路とは、自分の経路情報に記録されていない宛て先のパケットを送るためのものだ。 一般的にはルーターを指す。 else my_dgw変数が空でなければ以下を実行。 route add default gw $my_dgw routeコマンド?で、デフォルト経路としてmy_dgw変数の内容を経路テーブルに追加。 fi my_dgw変数が空かどうかの条件分岐を終了。 } set_defaultGw関数はここまで。 set_defaultIp関数 set_defaultIp() { set_defaultIp関数はここから。 echo "** setting default ip" /sbin/ifconfig $ENETNAME $DEFAULT_IP netmask 255.255.255.0 画面上に「** setting default ip」と表示。 ifconfigコマンド?でeth0にDEFAULT_IP変数の値とnetmaskを255.255.255.0を設定。 # delete default gw my_dgw= デフォルトゲートウェイを削除する、というコメントの後にmy_dgw変数に空を代入している。 } set_defaultIp関数はここまで。 set_defaultIf関数 set_defaultIf() { set_defaultIf関数はここから。 TMP=`cat /proc/net/route |awk {print $4} |grep 0003` TMPという変数を用意して、そこに「cat /proc/net/route |awk {print $4} |grep 0003」の結果を代入している。 3つの命令をパイプでつないでいるのだが、ひとつづつ見てみる。 cat /proc/net/route /proc/net/routeを読み込んで次の命令に渡す。 この/procにはprocファイルシステムがマウントされていて、カーネルの各種統計情報を閲覧することができるが、/proc/net/routeにはIP経路情報が記載されている。 このコマンドを実行してみると Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT eth0 0001A8C0 00000000 0001 0 0 0 00FFFFFF 0 0 0 eth0 00000000 0101A8C0 0003 0 0 0 00000000 0 0 0 というように出力された。 awk {print $4} awkコマンド?で第4パラメータを抜き取って次の命令へ。 第4パラメータとは、上の表から「Flags」のことだとわかる。 grep 0003 「0003」という文字列を検索している。 実際に「0003」という文字列があったので、この場合、TMP変数には「0003」と入る。 フラグ「0003」とは「経路は有効でゲートウェイを使用する」という内容だ。 今の例で言うなら、宛て先が「0.0.0.0/0」なので選ばれた経路はデフォルト経路である。 つまり、この一連の命令は「デフォルト経路をeth0が持っているかどうか」を調べていたのだ。 なければ空白が入る。 if [ "$TMP" = "" ]; then TMP変数が空なら以下を実行。 echo "add default if" 画面に「add default if」と表示。 #route add -net 255.255.255.255 netmask 255.255.255.255 $ENETNAME route add -net default $ENETNAME routeコマンド?でeth0経由のネットワーク255.255.255.255を追加する、はコメントアウトされ、routeコマンド?でeth0にデフォルト経路を追加している。 コメントアウトされている255.255.255.255/32の経路情報は「ローカルブロードキャスト」と呼ばれるもので、ルーターを超えないLAN内に一斉にパケットを送信する手段である。 fi TMP変数の内容の条件分岐を終了する。 } set_defaultIf関数はここまで。 set_dns関数 set_dns() { set_dns関数はここから。 echo "Configuration resolv.conf" 画面に「Configuration resolv.conf」と表示する。 cat /dev/null /etc/resolv.conf /etc/resolv.confの内容を消去している。 if [ "$my_dns1" != "" ]; then my_dns1変数が空でなければ以下を実行。 echo "nameserver $my_dns1" /etc/resolv.conf 「nameserver my_dns1変数の値」を/etc/resolv.confに追記。 fi my_dns1変数が空かどうかの条件分岐を抜ける。 if [ "$my_dns2" != "" ]; then my_dns2変数が空でなければ以下を実行。 echo "nameserver $my_dns2" /etc/resolv.conf 「nameserver my_dns2変数の値」を/etc/resolv.confに追記。 fi my_dns2変数が空かどうかの条件分岐を終了する。 } set_dns関数はここまで。 start関数 start() { start関数の定義が始まる。 configure configure関数の実行。 /sbin/ifconfig lo up ifconfigコマンド?でlo(ループバック)デバイスを始動する。 killall $BASE killallコマンド?で「basename /sbin/dhcpcd」を停止する、という内容だが、basenameコマンド?で/sbin/dhcpcdを「dhcpcd」と削ってkillallコマンド?に渡している。 結果的には「killall dhcpcd」となる。 rm -f /etc/dhcpc/dhcpcd-eth0.pid /etc/dhcpc/dhcpcd-eth0.pidをrmコマンド?で消去する。 # delete default gw デフォルトゲートウェイを削除する、とのコメント。 while do /sbin/route del default if [ $? -ne 0 ]; then break fi done while文による無限ループだ。 /sbin/route del default routeコマンド?でデフォルト経路を削除し if [ $? -ne 0 ]; then break fi routeコマンド?がエラーの終了ステータス「1」を返すまでbreak文でループから抜けられない。 sleep 1 1秒数えたあと echo "Configuration network interface lo $ENETNAME" 画面上に「Configuration network interface lo eth0」と表示。 ## ## change mtu (frame-size 1518,4100,7418) ## mtuの変更、とのコメント。 if [ "$mtu" = "4102" ] ; then mtu=4084 elif [ "$mtu" = "7422" ] ; then mtu=7404 elif [ "$mtu" = "9694" ] ; then mtu=9676 else mtu=1500 fi mtu変数が 4102であればmtu変数に4084を代入 7422であればmtu変数に7404を代入 9694であればmtu変数に9676を代入 それ以外ならmtu変数に1500を代入 という内容だ。 /sbin/ifconfig $ENETNAME mtu $mtu multicast ifconfigコマンド?でeth0のmtuを上で判別した値に設定しマルチキャストフラグを立てる。 if [ $? -ne 0 ]; then echo "mtu fail" /sbin/ifconfig $ENETNAME mtu 1500 multicast fi ifconfigコマンド?がエラーの場合、画面上に「mtu fail」と表示し、eth0のmtuを1500に設定しマルチキャストフラグを立てる。 if [ "$my_ipaddress" = "dhcp" ]; then my_ipaddress変数が「dhcp」であれば以下を実行。 if [ "$my_dgw" != "" ]; then my_dgw変数が空でなければ以下を実行。 echo "--- set static dgw" DHCP_GW="-G $my_dgw" 画面上に「--- set static dgw」と表示。 DHCP_GWという変数を用意し、「-G $my_dgw」を代入。 fi my_dgw変数が空かどうかの条件分岐を終了する。 ## see also /etc/dhcpc/dhcpcd.exe echo "DHCPCSTATE=requesting" /var/tmp/dhcpcstate /etc/dhcpc/dhcpcd.exeを参照、とのコメント。 /var/tmp/dhcpcstateに「DHCPCSTATE=requesting」を書き込み。 ## echo "requesting DHCP tout=30[s]" 画面上に「requesting DHCP tout=30[s]」と表示する。 $DHCPCD -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 $ENETNAME /sbin/dhcpcd -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 eth0 を実行。 if [ $? -ne 0 ]; then エラーが返れば以下を実行。 echo "** dhcp fail" 画面上に「** dhcp fail」と表示する。 echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate /var/tmp/dhcpcstateに「DHCPCSTATE=fixip」と書き込む。 set_defaultIp set_defaultGw set_defaultIp関数とset_defaultGw関数を実行する。 # wait linkup delay sleep 4 リンクが始動するのを4秒間待つ。 fi dhcpcdコマンドがエラーを返すかどうかの条件分岐を終了する。 else my_ipaddress変数が「dhcp」でなければ以下を実行。 echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate /var/tmp/dhcpcstateに「DHCPCSTATE=fixip」と書き込む。 echo "/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask" /sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask /sbin/ifconfig eth0 $my_ipaddress netmask $my_subnetmask を実行。 if [ $? -ne 0 ]; then エラーが返れば以下。 set_defaultIp set_defaultIp関数を実行。 fi エラーかどうかの判別終了。 set_defaultGw set_dns set_defaultGw関数、set_dns関数の実行。 fi my_ipaddress変数が「dhcp」かどうかの条件分岐を終了する。 ## set_defaultIf set_defaultIf関数を実行する。 ## set ipaddress in /etc/hosts /etc/init.d/sethostname.sh /etc/hostsにIPアドレスを設定する、というコメント。 /etc/init.d/sethostname.shの実行。 #/usr/local/bin/change_notify.sh network /usr/local/bin/change_notify.sh networkの実行はコメントアウトだ。 } start関数はここまで。 stop関数 stop() { stop関数はここから。 echo "Deconfiguration network interface lo $ENETNAME" 画面上に「Deconfiguration network interface lo eth0」と表示する。 killall $BASE killallコマンド?で「basename /sbin/dhcpcd」を停止する、という内容だが、basenameコマンド?で/sbin/dhcpcdを「dhcpcd」と削ってkillallコマンド?に渡している。 結果的には「killall dhcpcd」となる。 /sbin/ifconfig $ENETNAME down ifconfigコマンド?でeth0を停止している。 /sbin/ifconfig lo down ifconfigコマンド?でlo(ループバック)デバイスを停止している。 } stop関数はここまで。 スクリプト本体 # for NFS NFS用の分岐。NFSとは「Network File System」の略。 ネットワーク上のデバイスを自分のファイルのように扱えるファイルシステムだ。 TMP=`grep /dev/root /proc/mounts|grep nfs` TMPという変数を用意し、そこに「grep /dev/root /proc/mounts|grep nfs」を代入している。 1つめのgrep /proc/mountsから/dev/rootという文字列を検索している。その結果を次に渡す。 2つめのgrep 渡された結果からnfsという文字列を検索している。 これらはつまり「/dev/rootがnfs形式でマウントされているかどうか」を調査しているということだ。 この結果は「(空)」か「nfs」というどちらか2つしかない。 if [ "$TMP" != "" ]; then TMP変数が空でなければ以下を実行。 つまり/dev/rootがnfs形式でマウントされていれば、という条件だ。 echo "nfs root mode. skip $ENETNAME network configuration." 画面上に「nfs root mode. skip eth0 network configuration.」と表示。 exit 0 終了ステータスに正常を示す「0」を設定しスクリプトを終了する。 fi TMP変数が空かどうかの条件分岐を終了。 lock_file check /usr/local/bin/kuro_libのlock_file関数にcheckという引数を付けて実行。 lock_file関数を見てみる。 lock_file関数 lock_file(){ lock_file関数はここから。 case $1 in 第1引数の内容で処理内容を分岐する。 checkの場合 check) [ -f "${LOCK}" ] echo "${THIS_SCRIPT} already runnign" /var/lock/networkingが存在すれば、画面上に「${THIS_SCRIPT} already runnign」と表示する。 ちなみに行末の「runnign」は「running」のスペルミスだろう。 return 1 ;; 戻り値に「1」を設定しlock_file関数を終了する。 createの場合 create) echo "${THIS_SCRIPT}" $2 ${LOCK} ;; 「${THIS_SCRIPT} 第2引数」と/var/lock/networkingに書き込む。 deleteの場合 delete) rm -f ${LOCK} ;; /var/lock/networkingを消去する。 delete_logの場合 delete_log) rm -f ${LOCK}.log ;; /var/lock/networking.logを消去する。 それ以外の場合 *) ;; 何もしない。 esac 第1引数の内容による処理振り分けを終了する。 } lock_file関数はここまで。 lock_file create case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac lock_file delete exit 0
https://w.atwiki.jp/aerocats/pages/21.html
日経Linux2007年5月号(56ページ)より以下抜粋。 Linuxを形作るファイルは、役割ごとに/binや/homeなどあらかじめ定められたディレクトリに並んでいます。設定に関するファイルは/etc(スラエトセと読む)にあります。Linux自体の起動設定、ネットワーク設定、表示設定、個別のアプリケーション設定など、多岐にわたりますが、すべてがテキスト・ファイル形式で収められています。 テキストファイルで各種の設定 /etcには「設定」と名がつく作業に必要なファイルが集められている。 Linuxのありとあらゆるシステム設定に欠かせないファイルがあるため、新しいプログラムをインストールしても「/etcに設定ファイルがあるだろう」と容易に想像がつく。 FHSとの比較 標準Linux・開発用Linuxの/etc(スラエトセ)ディレクトリをFHSが定めた内容と比較してみる。 FHS 標準Linux 開発用Linux 設定内容 /etc/opt × /optに関する設定。 (/etc/X11) × X Window Systemに関する設定。 (/etc/sgml) × SGMLに関する設定。 (/etc/xml) × XMLに関する設定。 csh.login × Cシェルがログイン時に参照。 exports × NFSクライアントにアクセスを許す共有ディレクトリの一覧。 fstab ○ ファイルシステムのマウントポイント。 ftpusers × FTPアクセスを禁止するユーザー一覧。 gateways × 動的経路を設定するroutedコマンド?が参照。 gettydefs × loginコマンド?を呼び出すgettyコマンド?が通信速度と端末の設定時に参照。 group ○ ユーザーグループの定義。 host.conf × 名前解決(DNS)の際の優先順位を定義。 hosts ○ 名前解決のためのホスト名、IPアドレス設定。 hosts.allow × xinetd?経由で起動するサーバーのアクセス可能ホストを定義。 hosts.deny × xinetd?経由で起動するサーバーのアクセス拒否ホストを定義。 hosts.equiv × 外部からのリモートアクセスを許可するか否かを設定。 hosts.lpd × 外部からのリモートアクセスによる印刷を許可するか否かを設定。 inetd.conf × ポートを監視するinetd?に対象ポートと、アクセスを発見した場合に起動するプログラムを指示。 inittab ○ 起動時のランレベル?などを定義。 issue ○ ローカルログイン時の表示メッセージ。 id.so.conf × 共有ライブラリ?の検索パスを定義。 motd × コンソールログイン時の表示メッセージ。 mtab ○ マウント中のファイルシステム一覧。 mtools.conf × MS-DOSのディスクにアクセスするmtoolsコマンド群の設定。 networks × ブート時に用いるホスト名、IPアドレスの対応情報。 passwd ○ ユーザー名、ユーザーIDなどを記録。 printcap × プリンタの設定。 profile ○ ログイン時にbash?が参照・実行する設定。 protocols × プロトコルのデータベースであり、IPヘッダーに含まれるプロトコル種別を示す数値と特定のプロトコルを結び付ける。 resolv.conf ○ ホスト名とIPアドレスにおける名前解決の設定。 rpc × RPC(Remote Procedure Call)に用いるサーバー名とプロトコル番号の一覧。 securetty × rootがログインできるターミナルを指定。 services ○ ネットワークサービス名と利用ポート、プロトコルの対応を定義。 shells × ログインシェルとして利用可能なシェルを記述。 syslog.conf ○ ログデーモンであるsyslog?の設定。 ※引用「日経Linux2007年5月号(59ページ)」(日経BP社)